package com.database;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 * <p>Title: AbstractLocator</p>
 * <p>Description:Locator的实现类所继承的抽象类。这个抽象<br>
 *    类有三个实现方法和两个抽象方法。所有这个类的实现类都必须<br>
 *    是Singleton模式的
 * </p>
 * @author kevin
 * @version 1.1
 */

public abstract class AbstractLocator {
    public AbstractLocator() {
    }

    protected abstract Object lookup(String name) throws NamingException;

    /**
     * 实现方法，用来得到Context实例。这个方法首先会调用getPorperties方法<br>
     * 得到一个java.util.Porperties的实例，然后再根据Porperties的实例得<br>
     * 到一个java.util.Context类的实例，并返回。
     * @return Context - 生成的Context类的实例。
     * @throws NamingException
     */
    protected Context getContext() throws NamingException {
        Context ctx = new InitialContext();
        return ctx;
    }

    /**
     * 实现方法。用来关闭Context类的实例。
     * @param context:Context 被关闭的Context类的实例
     * @throws NamingException
     */
    protected void closeContext(Context context) throws NamingException {
        if (context != null) {
            context.close();
        }
    }
}
